package servlet;

import anno.Autowired;
import anno.RequestBody;
import anno.ResponseBody;
import dao.CinemaDAO;
import pojo.Cinema;
import utils.ApiResult;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;

@WebServlet("/cinema")
public class CinemaServlet extends BaseServlet {

    @Autowired
    private CinemaDAO cinemaDAO;

    /**
     * 添加电影院
     *
     * @param req    请求对象
     * @param resp   响应对象
     * @param cinema 电影院对象
     * @return ApiResult 响应结果
     * @throws SQLException SQL异常
     */
    @ResponseBody
    public ApiResult addCinema(HttpServletRequest req, HttpServletResponse resp, @RequestBody Cinema cinema) throws SQLException {
        cinemaDAO.insert(cinema);
        return new ApiResult(200, "电影院添加成功", null);
    }

    /**
     * 更新电影院
     *
     * @param req    请求对象
     * @param resp   响应对象
     * @param cinema 电影院对象
     * @return ApiResult 响应结果
     * @throws SQLException SQL异常
     */
    @ResponseBody
    public ApiResult updateCinema(HttpServletRequest req, HttpServletResponse resp, @RequestBody Cinema cinema) throws SQLException {
        cinemaDAO.update(cinema);
        return new ApiResult(200, "电影院更新成功", null);
    }

    /**
     * 删除电影院
     *
     * @param req  请求对象
     * @param resp 响应对象
     * @param id   电影院ID
     * @return ApiResult 响应结果
     * @throws SQLException SQL异常
     */
    @ResponseBody
    public ApiResult deleteCinema(HttpServletRequest req, HttpServletResponse resp, String id) throws SQLException {
        cinemaDAO.deleteById(Integer.parseInt(id));
        return new ApiResult(200, "电影院删除成功", null);
    }

    /**
     * 根据ID查询电影院
     *
     * @param req  请求对象
     * @param resp 响应对象
     * @param id   电影院ID
     * @return ApiResult 响应结果
     * @throws SQLException SQL异常
     */
    @ResponseBody
    public ApiResult getCinemaById(HttpServletRequest req, HttpServletResponse resp, String id) throws SQLException {
        Cinema cinema = cinemaDAO.findById(Integer.parseInt(id));
        return new ApiResult(200, "电影院查询成功", cinema);
    }

    /**
     * 获取所有电影院
     *
     * @param req  请求对象
     * @param resp 响应对象
     * @return ApiResult 响应结果
     * @throws SQLException SQL异常
     */
    @ResponseBody
    public ApiResult getAllCinemas(HttpServletRequest req, HttpServletResponse resp) throws SQLException {
        List<Cinema> cinemas = cinemaDAO.findAll();
        return new ApiResult(200, "获取所有电影院成功", cinemas);
    }


    /**
     * 分页模糊查询电影院
     *
     * @param req      请求对象
     * @param resp     响应对象
     * @param keyword  模糊查询关键字
     * @param pageNum  当前页码
     * @param pageSize 每页记录数
     * @return ApiResult 响应结果
     * @throws SQLException SQL异常
     */
    @ResponseBody
    public ApiResult findCinemasByPageAndName(HttpServletRequest req, HttpServletResponse resp, String keyword, String pageNum, String pageSize) throws SQLException {
        int page = Integer.parseInt(pageNum);
        int size = Integer.parseInt(pageSize);
        Map<String, Object> result = cinemaDAO.findCinemasByPageAndName(keyword, page, size);
        return new ApiResult(200, "分页模糊查询电影院成功", result);
    }
}